﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace HandlingProcedures
{
    /// <summary>
    /// Медицинская карта с информацией о клиенте и назначенных ему процедурах
    /// </summary>
    public class MedicalCard
    {
        private Client client;
        private List<MedicalProcedure> procedures;

        /// <summary>
        /// Процедуры, назначенные клиенту
        /// </summary>
        public List<MedicalProcedure> Procedures
        {
            get { return procedures; }
            set { procedures = value; }
        }
        /// <summary>
        /// Клииент санатория
        /// </summary>
        public Client Client
        {
            get { return client; }
            set { client = value; }
        }

        public MedicalCard()
        {
            procedures = new List<MedicalProcedure>();
        }

        /// <summary>
        /// 
        /// </summary>
        /// <param name="id">id клиента в базе данных</param>
        /// <param name="name">Имя клиента</param>
        /// <param name="surname">Фамилия клиента</param>
        /// <param name="patronymic">Отчество клиента</param>
        public MedicalCard(int id, string name, string surname, string patronymic)
        {
            client = new Client(id, name, surname, patronymic);

            procedures = new List<MedicalProcedure>();
        }

        /// <summary>
        /// 
        /// </summary>
        /// <param name="client">Клиент, для которого заводится мед. карта</param>
        public MedicalCard(Client client)
        {
            this.client = client;
        }

        /// <summary>
        /// 
        /// </summary>
        /// <param name="client">Клиент, для которого заводится мед. карта</param>
        /// <param name="procedures">Процедуры назначенные клиенту</param>
        public MedicalCard(Client client, IList<MedicalProcedure> procedures)
        {
            this.client = client;
            InitializationProcedures(procedures);
        }

        /// <summary>
        /// Добавление процедуры с проверкой на совпадение с имеющимися
        /// </summary>
        /// <param name="procedure">Медицинская процедура</param>
        public void AddProcedure(MedicalProcedure procedure)
        {
            //Сделать проверку на совпадение с уже имеющимися процедурами
            foreach (MedicalProcedure temp in procedures)
            {
                if (temp.Shedule_id == procedure.Shedule_id && temp.Date == procedure.Date)
                    return;
            }

            procedures.Add(procedure);
        }

        /// <summary>
        /// Установка списка процедур
        /// </summary>
        /// <param name="insiseProcedures">Медицинские процедуры</param>
        public void InitializationProcedures(IList<MedicalProcedure> insiseProcedures)
        {
            if (procedures.Count == 0)
            {
                if (insiseProcedures is List<MedicalProcedure>)
                {
                    procedures = (List<MedicalProcedure>)insiseProcedures;
                }
                else
                {
                    foreach (MedicalProcedure procedure in insiseProcedures)
                    {
                        procedures.Add(procedure);
                    }
                }
            }
            else
            {
                throw new ApplicationException("Коллекция процедур уже содержит данные");
            }
        }
    }
}
